package org.bibpessoal.entidades;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@NamedQueries({ 
	@NamedQuery(
			name = "autenticarUsuario", 
			query = "SELECT u FROM Usuario u WHERE u.login = :login AND u.senha = :senha") 
})

@Entity
public class Usuario implements Serializable {
	private static final long serialVersionUID = -1050254695918673581L;
	private int id;
	private String nome;
	private String email;
	private String login;
	private String senha;
	private String fone;
	public String getFone() {
		return fone;
	}

	public void setFone(String fone) {
		this.fone = fone;
	}

	private List<Livro> livros;
	private Warnings warnings;
	private List<Amizade> amigos;
	private List<Amizade> amigosde;

	public Usuario() {
		super();
		livros = new ArrayList<Livro>();
	}

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@Column(unique = true)
	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	@OneToMany(mappedBy = "usuario", cascade=CascadeType.REMOVE)
	public List<Livro> getLivros() {
		return livros;
	}

	public void setLivros(List<Livro> livros) {
		this.livros = livros;
	}

	public void setLivro(Livro livro) {
		this.livros.add(livro);
	}

	@OneToOne(cascade=CascadeType.REMOVE)
	public Warnings getWarnings() {
		return warnings;
	}

	public void setWarnings(Warnings warnings) {
		this.warnings = warnings;
	}
	
	@OneToMany(mappedBy = "usuario1", fetch=FetchType.EAGER)
	public List<Amizade> getAmigos() {
		return amigos;
	}

	public void setAmigos(List<Amizade> amigos) {
		this.amigos = amigos;
	}

	@OneToMany(mappedBy = "usuario2", fetch=FetchType.EAGER)
	public List<Amizade> getAmigosde() {
		return amigosde;
	}

	public void setAmigosde(List<Amizade> amigosde) {
		this.amigosde = amigosde;
	}
}
